/**
 * TODO 添加schemeStore. 增加simGrid
 * 
 */
var ds;

var grid;
var insertForm;
var updateForm;
var form;
var win;
var spec, ssign, plate, transnum, ordernum, dateFrom, dateTo, schemeStore;
var simGrid;
var similaryList;
var TRANSNUM;
var detailFormStore;
var CAILIAOFEE = "cailiaofee";
var TOTAL_FACTORY_FEE = "total_factory_fee";
var ADJUST_OSM_FUNC = "adjust_most_sim_order";
var CEDGrid;
var ced_fieldset = new Ext.form.FieldSet({
			xtype : 'fieldset',
			title : '估算的详细信息',
			collapsible : true,
			collapsed : false,
			width : 800,
			autoHeight : true,
			layout : 'form'
		});;

var aep = new AutoEstPrice();
var sortStore;
var schemeArr = [];
var schemeDs = new Ext.data.SimpleStore({
			fields : ['scheme', 'value'],
			data : schemeArr
		});
var month1, year1;
Ext.onReady(function() {
	logger.debug("logger start to work!!");
	var ur = new UrlParse(window.location.href);

	initData();
	aep.setConfig({
				name : TOTAL_FACTORY_FEE,
				func : CostEstimate.generateCost
			});
	aep.setConfig({
				name : ADJUST_OSM_FUNC,
				func : CostEstimate.generateCostByOsm
			});

	if (ur.getParams("transnum")) {
		TRANSNUM = ur.getParams("transnum");
		detailFormStore.load({
					params : {
						transnum : TRANSNUM,
						start : 0,
						limit : 10
					},
					callback : function(ret) {
						if(!ret)
						{
							Ext.Msg.alert("错误","暂时无法处理这个类型的规格，请联系管理员进行添加");
							return;
						}
						logger
								.debug("------------------processScheme:"
										+ detailFormStore.getAt(0).data["processScheme"]);
						initSchemeDs(detailFormStore.getAt(0).data["spec"]);
						aep.setConfig(detailFormStore.getAt(0).data);

					}
				});
		similaryList.load({
			params : {
				transnum : TRANSNUM,
				start : 0,
				limit : 10
			},
			callback : function(records, opt, sucess) {
				// TODO 这里希望可以通过dwr，计算得到成本。
				if(!sucess)
				{
					Ext.Msg.alert("错误","暂时无法处理这个类型的规格，可能是没有该加工类型的记录，请选择详细估算");
					return;
				}
				aep.run(TOTAL_FACTORY_FEE, aep.getProduct(), aep.getDate(), "",
						function(ret) {
							if(!ret||ret.length==0)
							{
								Ext.Msg.alert("错误","暂时无法处理这个类型的规格，请联系管理员进行添加");
								return ;
							}
							CEDGrid = aep.parseGrid(ret);

							ced_fieldset.add(CEDGrid);

							simGrid = initSimGrid();
							initGrid();
							form.getForm().loadRecord(detailFormStore.getAt(0));
							// 添加开模规格
							form.find("name", "kaimo")[0].setValue(aep.store
									.getAt(0).data["spec_yz"]);

							// 添加产品综合报价
							form.find("name", "price")[0].setValue(aep
									.getPrice());
							aep.store.on("load", function(store, _rec, opt) {
								if (store.getCount() > 0)
									form.find("name", "kaimo")[0]
											.setValue(store.getAt(0).data["spec_yz"]);
								form.find("name", "price")[0].setValue(aep
										.getPrice());
							});

						});
			}

		});
	} 

});

function initData() {
	detailFormStore = new Ext.data.Store({
				proxy : new Ext.data.HttpProxy({
							url : '../DetailPrice.do?action=getForm'
						}),
				reader : new Ext.data.JsonReader({
							totalProperty : 'totalProperty',
							root : 'root'
						}, [{
									name : 'transnum'
								}, {
									name : 'spec',
									mapping : 'kaiMoSpec'
								}, {
									name : 'kaimo',
									mapping : 'getSpec'
								}, {
									name : 'specType'
								}, {
									name : 'processScheme'
								}, {
									name : 'ssign'
								}, {
									name : 'plate'
								}])

			});
	similaryList = new Ext.data.Store({
				proxy : new Ext.data.HttpProxy({
							url : '../CostEstimate.do?action=getSimiList'
						}),
				reader : new Ext.data.JsonReader({
							totalProperty : 'totalProperty',
							root : 'root'
						}, [{
									name : 'id',
									mapping : 'osm.id'
								}, {
									name : 'spec',
									mapping : 'osm.spec'
								}, {
									name : 'factory',
									mapping : 'osm.factory'

								}, {
									name : 'transnum',
									mapping : 'osm.transnum'
								}, {
									name : 'ordernum',
									mapping : 'osm.ordernum'
								}, {
									name : 'ssign',
									mapping : 'osm.ssign'
								}, {
									name : 'ssign_yz',
									mapping : 'osm.ssign_yz'
								}, {
									name : 'grossweight',
									type : 'float',
									mapping : 'osm.grossweight'
								}, {
									name : 'qiandao_yield',
									type : 'float',
									mapping : 'osm.qiandao_yield'
								}, {
									name : 'yimo',
									type : 'float',
									mapping : 'osm.yimo'
								}, {
									name : 'weimo',
									type : 'float',
									mapping : 'osm.weimo'
								}, {
									name : 'feipin',
									type : 'float',
									mapping : 'osm.feipin'
								}, {
									name : 'qiandao_cost',
									type : 'float',
									mapping : 'osm.qiandao_cost'
								}, {
									name : 'product_cost_before',
									type : 'float',
									mapping : 'osm.product_cost_before'
								}, {
									name : 'specType',
									mapping : 'osm.specType'
								}, {
									name : 'processScheme',
									mapping : 'osm.processScheme'
								}, {
									name : 'plate',
									mapping : 'osm.plate'
								}, {
									name : 'baozhuangfei',
									type : 'float',
									mapping : 'osm.baozhuangfei'
								}, {
									name : 'houdao_yield',
									type : 'float',
									mapping : 'osm.houdao_yield'
								}, {
									name : 'product_cost_last',
									type : 'float',
									mapping : 'osm.product_cost_last'
								}, {
									name : 'date1',
									mapping : 'osm.date1'
								}, {
									name : 'ordercost',
									type : 'float',
									mapping : 'osm.ordercost'
								}, {
									name : 'lirun',
									mapping : 'osm.lirun'
								}, {
									name : 'bz',
									mapping : 'osm.bz'
								}, {
									name : 'maker',
									mapping : 'osm.maker'
								}, {
									name : 'makeDate',
									mapping : 'osm.makeDate'
								}, {
									name : 'type',
									mapping : 'osm.type'
								}, {
									name : 'peifang',
									type : 'float',
									mapping : 'osm.peifang'
								}, {
									name : 'spec_yz',
									mapping : 'osm.spec_yz'
								}, {
									name : 'month1',
									mapping : 'osm.month1'
								}, {
									name : 'year1',
									mapping : 'osm.year1'
								}, {
									name : 'status',
									mapping : 'osm.status'
								}, {
									name : 'similary',
									type : 'float',
									mapping : 'sim'
								}])

			});
	/*
	 * similaryList.on("load",function(store,_rec,opt){ var kaimo="";
	 * if(store.getCount()>0) kaimo=store.getAt(0).data["spec_yz"];
	 * form.find("name","kaimo")[0].setValue(kaimo);
	 *  })
	 */
};

function initSchemeDs(spec) {
	orderSumMain.getScheme(spec, function(ret) {

				var record = -1;
				var obj = {};
				for (var i = 0; i < ret.length; i++) {
					if (!obj[ret[i].scheme])
						obj[ret[i].scheme] = "";

					if (obj[ret[i].scheme] == "")
						obj[ret[i].scheme] += (ret[i].processName);
					else
						obj[ret[i].scheme] += ("-->" + ret[i].processName);
				}
				var k = 0;
				for (var prop in obj) {
					schemeArr[prop - 1] = [prop, obj[prop]];
				}
				schemeDs.loadData(schemeArr);
			});
}
function initSimGrid() {
	var sm = new Ext.grid.CheckboxSelectionModel();
	if (!simGrid) {
		simGrid = new Ext.grid.GridPanel({

					id : 'sim-grid',
					autoScoll : true,
					ds : similaryList,
					width : 400,
					height : 260,
					cm : new Ext.grid.ColumnModel([sm, {
								header : "相似度",
								width : 60,
								sortable : true,
								renderer : function(value) {
									if (value <= 1)
										return (value * 100).toFixed(2) + "%";
								},
								dataIndex : 'similary'
							}, {
								header : "编号",
								width : 60,
								sortable : true,
								dataIndex : 'id'
							}, {
								header : "月份",
								width : 60,
								sortable : true,
								dataIndex : 'month1'
							}, {
								header : "年份",
								width : 60,
								sortable : true,
								dataIndex : 'year1'
							}, {
								header : "规格",
								width : 60,
								sortable : true,
								dataIndex : 'spec'
							}, {
								header : "牌号",
								width : 60,
								sortable : true,
								dataIndex : 'ssign'
							}, {
								header : "镀层",
								width : 60,
								sortable : true,
								dataIndex : 'plate'
							}, {
								header : "分厂号",
								width : 60,
								sortable : true,
								dataIndex : 'factory'
							}, {
								header : "入库牌号",
								width : 60,
								sortable : true,
								dataIndex : 'ssign_yz'
							}, {
								header : "入库规格",
								width : 60,
								sortable : true,
								dataIndex : 'spec_yz'
							}, {
								header : "订单成本",
								width : 60,
								sortable : true,
								dataIndex : 'product_cost_last'
							}]),
					sm : sm,

					viewConfig : {
						forceFit : false
					}

				});
		simGrid.on("cellclick", function(simGrid, row, col) {
					if (col > 3) {
						Ext.Msg.confirm("提示", "是否需要将这个历史记录作为最相似的产品?", function(
										button) {
									if (button == 'yes') {
										var kaimo = form.find("name", "kaimo")[0]
												.getValue();
										logger.debug("row is:" + row);
										aep.run(ADJUST_OSM_FUNC, aep
														.getProduct(), aep
														.getDate(), kaimo, row,
												function(data) {
													aep.reloadData(data);

													logger.debug("调整最相似的产品成功;"
															+ data.length);

												});

									}
								});
					}

				});
	}
	return simGrid;
}

function initGrid() {
	Ext.QuickTips.init();

	var xg = Ext.grid;

	var sm = new xg.CheckboxSelectionModel();
	form = new Ext.FormPanel({
		renderTo : 'main',
		title : '快速报价',
		buttonAlign : 'center',
		bodyStyle : 'padding:5px;',
		// width : 700,
		frame : true,// 设置了面板的边角是圆弧过度的，底色
		labelWidth : 60,
		autoScroll : true,
		layout : 'border',
		// autoHeight:true,
		height : 700,
		width : 750,
		items : [{
			region : 'west',
			layout : 'column',
			autoHeight : true,
			width : 200,
			height : 200,
			split : true,

			items : [{
				columnWidth : 1,
				layout : 'form',
				xtype : 'fieldset',
				title : '估算基本信息',
				collapsible : true,
				collapsed : false,
				anchor : '95%',
				autoHeight : true,
				hideBorders : true,
				defaultType : 'textfield',
				items : [{
							columnWidth : 1,
							layout : 'form',
							fieldLabel : '编号',
							border : false,
							readOnly : true,
							name : 'transnum',
							anchor : '90%'

						}, {
							columnWidth : 1,
							layout : 'form',
							border : false,
							xtype : 'textfield',
							fieldLabel : '规格',
							name : 'spec',
							anchor : '90%'

						}, {
							columnWidth : 1,
							layout : 'form',
							border : false,

							xtype : 'textfield',
							fieldLabel : '牌号',

							name : "ssign",
							anchor : '90%'

						}, {
							columnWidth : 1,
							layout : 'form',
							border : false,

							xtype : 'textfield',
							fieldLabel : '镀层',
							name : "plate",
							anchor : '90%'

						}
						/*
						 * , { columnWidth : 1, layout : 'form', border : false,
						 * xtype : 'numberfield', fieldLabel : '分厂', name :
						 * "factory", listeners:{
						 * "change":function(_this,_new,_old) {
						 * Ext.Msg.confirm("提示","是否需要对该分厂的订单成本进行估算",function(button){
						 * if(button=='yes') { // TODO 这里需要 } }); } }, anchor :
						 * '90%' }
						 */
						, {
							columnWidth : 1,
							layout : 'form',
							border : false,

							xtype : 'datefield',
							format : 'Y-m-d',
							fieldLabel : '日期',
							emptyText : today.format("n/j/Y"),
							name : "date1",
							anchor : '90%'

						}, {
							columnWidth : 1,
							layout : 'form',
							border : false,

							xtype : 'textfield',
							fieldLabel : '规格类型',
							readOnly : true,
							name : "specType",
							anchor : '90%'

						}, {
							layout : 'form',
							border : false,
							labelSeparator : ':',

							columnWidth : 1,
							layout : 'form',
							border : false,

							fieldLabel : '加工流程',
							allowBlank : false,
							xtype : 'combo',
							store : schemeDs,
							displayField : 'value',
							valueField : 'scheme',
							triggerAction : 'all',
							mode : 'local',
							name : "processScheme",
							listeners : {
								"select" : function(_this, _rec, _index) {
									// TODO 这里需要添加加工流程变化了以后，怎么更改。
									Ext.Msg.confirm("提示:", "是否需要真的变换加工流程?",
											function(button) {

												if (button == 'yes') {
													var kaimo = form.find(
															"name", "kaimo")[0]
															.getValue();
													aep.setConfig({
																scheme : _index
															});
													aep.run(TOTAL_FACTORY_FEE,
															aep.getProduct(),
															aep.getDate(),
															kaimo, function(
																	data) {
																aep
																		.reloadData(data);

																logger
																		.debug("---------------start to add grid");

															});
													reloadSimList();

												}
											});
								}
							},

							anchor : '90%'

						}, {
							columnWidth : 1,
							layout : 'form',
							border : false,

							xtype : 'textfield',
							fieldLabel : '开模规格',
							name : "kaimo",
							listeners : {
								"change" : function(_this, _new, _old) {
									Ext.Msg.confirm("提示",
											"开模规格发生变化，是否需要重新估算成本?", function(
													button) {
												if (button == 'yes') {
													var kaimo = _new;
													aep.run(TOTAL_FACTORY_FEE,
															aep.getProduct(),
															aep.getDate(),
															kaimo, function(
																	data) {
																aep
																		.reloadData(data);

																logger
																		.debug("---------------start to add grid");

															});
												}

											});

								}
							},
							anchor : '90%'

						}, {
							columnWidth : 1,
							layout : 'form',
							border : false,
							xtype : 'textfield',
							fieldLabel : '产品报价',
							name : "price",
							readOnly : true,
							anchor : '90%'

						}]
			}]
		}, {
			region : 'east',
			layout : 'column',
			autoHeight : true,
			width : 400,

			items : [{
						columnWidth : .95,
						layout : 'form',
						xtype : 'fieldset',
						title : '相似的产品信息',
						collapsible : true,
						collapsed : false,
						anchor : '95%',
						autoHeight : true,
						hideBorders : true,

						items : [simGrid]
					}]
		}, {
			region : 'center',
			layout : 'column',
			split : true,
			items : [{

				columnWidth : .95,
				layout : 'form',
				xtype : 'fieldset',
				collapsible : true,
				collapsed : false,
				autoHeight : true,
				title : '估算的详细信息',

				// items : [CEDGrid],
				html : "<p font-color='red'>1,左边的是待估算产品的信息，</p><p>2,右边的是相似产品的列表</p>",
				anchor : '95%'

			}]
		}, {
			region : 'south',
			layout : 'column',
			height : 300,
			// width:800,
			split : true,
			items : [ced_fieldset]
		}],
		tbar : ['-', {
			text : '清除缓存',
			handler : function() {
				Ext.Msg.confirm("提示", "是否需要清除掉相似度订单的缓存,可能会减低运行速度", function(
								button) {
							if (button == 'yes') {
								CostEstimate.refreshCache(function(ret) {
											if (ret)
												Ext.Msg.alert("消息", "清除缓存成功");
											else
												Ext.Msg.alert("错误",
														"清除缓存失败,请联系管理员查明原因");
										});
							}

						});
			}
		}, '-', {
			text : '成本估算',
			handler : function() {
				if (form.getForm().isValid()) {
					var cost = {
						"ssign" : form.find("name", "ssign")[0].getValue(),
						"spec" : form.find("name", "spec")[0].getValue(),
						"plate" : form.find("name", "plate")[0].getValue(),
						"specType" : form.find("name", "specType")[0]
								.getValue(),
						"scheme" : form.find("name", "processScheme")[0].getValue()
					};
					var kaimo=form.find("name", "kaimo")[0].getValue();
					aep.setConfig(cost);

					aep.run(TOTAL_FACTORY_FEE, aep.getProduct(), aep.getDate(),
							kaimo, function(data) {
								aep.reloadData(data);

								logger
										.debug("---------------start to add grid");

							});
					reloadSimList();

				} else {
					Ext.MessageBox.alert('提示', '请正确填写数据！');
				}
			}
		}, '-']
	});
};

function reloadSimList() {
	similaryList.load({
				params : {
					ssign : aep.ssign,
					spec : aep.spec,
					specType : aep.type,
					scheme : aep.scheme,
					factory : aep.factory,
					plate : aep.plate

				}
			});
}
